package com.longway.common.interceptor;

import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
import com.jfinal.kit.Ret;
import com.jfinal.plugin.activerecord.Db;
import com.jfinal.plugin.activerecord.Record;
import com.jfinal.plugin.ehcache.CacheKit;
import com.jfinal.plugin.ehcache.IDataLoader;
import com.longway.common.constant.Const;
import com.longway.common.controller.CacheController;
import com.longway.common.kit.IpKit;
import com.longway.common.model.BaseUser;
import com.longway.common.service.BusinessService;

import java.io.IOException;
import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.List;

/**
 * 从 cookie 中获取 sessionId，如果获取到则根据该值使用 LoginService
 * 得到登录的 BaseUser 对象 ---> loginAccount，供后续的流程使用
 * 
 * 注意：将此拦截器设置为全局拦截器，所有 action 都需要
 */
public class LoginSessionInterceptor implements Interceptor {

    public static final String remindKey = "_remind";
    
	@Override
    public void intercept(Invocation inv) {
        BaseUser loginAccount = null;
		Controller c = inv.getController();
		String sessionId = c.getCookie(Const.sessionIdName);
		if (sessionId != null) {
			//先从缓存根据sessionId获取用户信息
			loginAccount = BusinessService.me.getLoginAccountWithSessionId(sessionId);
			if (loginAccount == null) {
				//根据sessionId从session表中查询有效的session,如果session失效则直接返回null
				//session有效,则根据session中存取的getAccountId从用户表查询有效的用户信息返回
				String loginIp = IpKit.getRealIp(c.getRequest());
				loginAccount = BusinessService.me.loginWithSessionId(sessionId, loginIp);
			}
			if (loginAccount != null) {
				// 用户登录账号
				c.setAttr(Const.loginAccountCacheName, loginAccount);
			} else {
				c.removeCookie(Const.sessionIdName); // cookie 登录未成功，证明该 cookie 已经没有用处，删之
			}
//		}else{
//			System.out.println(c.getRequest().getContextPath());
//			c.redirect("/admin/login");
//			c.replace("/admin/login");
			
			
			
//			try {
//				InetAddress ia = InetAddress.getLocalHost();
//				System.out.println(ia.getHostAddress());
//				if(ia.getHostAddress().contains("39.98.172.88")){
//					c.getResponse().sendRedirect("http://sys.lgkj365.com/");
//				}else{
//					c.getResponse().sendRedirect("http://localhost/");
//				}
//				
//			} catch (UnknownHostException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			} catch (IOException e) {
//				// TODO Auto-generated catch block
//				e.printStackTrace();
//			}
		}

		inv.invoke();

        /*if (loginAccount != null) {
            // remind 对象用于生成提醒 tips
            Remind remind = RemindService.me.getRemind(loginAccount.getId());
            if (remind != null) {
                if (remind.getReferMe() > 0 || remind.getMessage() > 0 || remind.getFans() > 0) {
                    c.setAttr(remindKey, remind);
                }
            }
        }*/
	}
	
}



